package com.xiepei.day01;

import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.List;
import java.util.ArrayList;
import java.util.TreeSet;

/**
 * 下一课：初识 Set 家族。
 *
 * 核心目标：
 * 1. 理解 Set 的“不允许重复”特性以及典型使用场景。
 * 2. 熟悉 HashSet、LinkedHashSet、TreeSet 的基本差异。
 * 3. 通过简单示例体会去重、成员判断、排序等常见操作。
 *
 * 课后练习建议：
 * - 写一个方法，传入 int[]，返回去重后的 Set，并统计原数组与结果的大小差异。
 * - 使用 TreeSet 对一组自定义对象（如学生{姓名,成绩}）按成绩排序，体会 compareTo 的实现。
 */
public class Lesson05_Set基础 {

    public static void main(String[] args) {
        basicHashSetDemo();
        System.out.println();
        compareDifferentSetImplementations();
        System.out.println();
        membershipCheck();
    }

    /**
     * 展示 HashSet 如何自动去重。
     */
    private static void basicHashSetDemo() {
        Set<String> tags = new HashSet<>();
        tags.add("Java");
        tags.add("Collections");
        tags.add("Java"); // 重复元素会被忽略
        tags.add(null);   // HashSet 允许单个 null

        System.out.println("=== HashSet 基础演示 ===");
        System.out.println("集合内容：" + tags);
        System.out.println("元素个数：" + tags.size());
    }

    /**
     * 对比三种常见实现类的顺序与排序特性。
     */
    private static void compareDifferentSetImplementations() {
        String[] data = {"List", "Set", "Map", "Set", "Queue"};

        Set<String> hashSet = new HashSet<>(Arrays.asList(data));
        Set<String> linkedHashSet = new LinkedHashSet<>(Arrays.asList(data));
        Set<String> treeSet = new TreeSet<>(Arrays.asList(data));

        System.out.println("=== 不同 Set 实现类的顺序差异 ===");
        System.out.println("HashSet（无序）：" + hashSet);
        System.out.println("LinkedHashSet（保持插入顺序）：" + linkedHashSet);
        System.out.println("TreeSet（元素排序）：" + treeSet);
    }

    /**
     * 展示 contains / remove 等常用操作。
     */
    private static void membershipCheck() {
        Set<Integer> numbers = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
        System.out.println("=== 成员操作 ===");
        System.out.println("初始集合：" + numbers);

        String[] arrString ={"a","b"};
        System.out.println("arrString: " + Arrays.toString(arrString));

        int target = 3;
        if (numbers.contains(target)) {
            System.out.println("集合包含 " + target + "，尝试删除...");
            numbers.remove(target);
        }

        System.out.println("删除后的集合：" + numbers);
        System.out.println("集合是否为空：" + numbers.isEmpty());
    }
}

